// @author: caoshi
// @date: 2021-05-16 09:24
// GORM 初体验
package main

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

// 数据库连接参数
const connInfo = "root:hadoop123@(121.196.166.188:3306)/devtest?charset=utf8mb4&parseTime=True&loc=Local"

type UserInfo struct {
	ID     uint
	Name   string
	Gender string
	Hobby  string
}

func main() {
	db, err := gorm.Open("mysql", connInfo)
	if err != nil {
		fmt.Println(err)
		panic(err)
	}

	defer db.Close()
	// 自动迁移
	/*
		gorm可以支持自动迁移，也就是自动的表结构迁移，只会创建表，补充缺少的列，缺少的索引。
		但并不会更改已经存在的列类型，也不会删除不再用的列，这样设计的目的是为了保护已存在的数据。
		可以同时针对多个表进行迁移设置.
	*/
	// db.AutoMigrate(&UserInfo{})
	//u1 := UserInfo{ID: 1, Name: "zhangsan", Gender: "男", Hobby: "basketball"}
	//u2 := UserInfo{ID: 2, Name: "lisi", Gender: "女", Hobby: "pingpong"}
	//u3 := UserInfo{ID: 3, Name: "wangwu", Gender: "男", Hobby: "手游"}
	//
	//// 创建记录
	//db.Create(&u1)
	//db.Create(&u2)
	//db.Create(&u3)
	//
	//u4 := UserInfo{Name: "赵六", Gender: "女", Hobby: "写代码"}
	//db.Create(&u4)

	// 查询
	//var u = new(UserInfo)
	//// 查到第一条记录
	//db.First(u)
	//fmt.Printf("%#v\n", u)		// &{1 zhangsan 男 basketball}

	// 简单条件查询
	var u2 = new(UserInfo)
	db.Find(&u2, "hobby=?", "写代码") // 这里sql查询where后的字段名不区分大小写
	fmt.Printf("更新前 u2 %#v\n", u2)
	//
	//// 更新
	//db.Model(&u2).Update("hobby", "钓鱼")
	//fmt.Printf("更新后 u2 %#v\n", u2)
	//
	// 删除
	// 注意删除记录时要确保要删除的记录主键字段有值，
	// GORM 会通过主键去删除记录，如果主键为空，GORM 会删除该 model 的所有记录!!
	db.Delete(&u2)
}
